<?

JCAT_Package::ImportClass('JCAT_Controller',JCAT::PACKAGE_MVC) ;

class DataVerifier extends JCAT_Controller
{
	/**
	 * what's this
	 * 
	 * @access	public
	 * @param	$aParent=null	JCAT_IController		父控制器
	 * @param	$aParent=null	JCAT_IController		拥有此视图的对象
	 * @return	void
	 */
	public function DataVerifier($sDataVerifierClassName,IToolboxDataVerifierDoc $aDoc=null,JCAT_IController $aParent=null)
	{
		$this->JCAT_Controller(__CLASS__, $aParent) ;
		
		// 子控制器 －－－－－－－－－－－
		if( !class_exists($sDataVerifierClassName) )
			throw new JCAT_Exception(JCAT_Language::Sentence('没有找到名为“%s”的校验器控制器；可能是安装了有故障的扩展，请尝试卸载故障扩展。',$sDataVerifierClassName),0) ;

		// 文档
		if(!$aDoc)
			$aDoc = call_user_func(array($sDataVerifierClassName,'CreateDataVerifierDoc')) ;
		$this->AddDocument($aDoc,'DataVerifierDoc') ;
		
		// 创建 子控制器
		$aSubController = new $sDataVerifierClassName($aDoc,$this) ;
		$this->AddController($aSubController,'ConcreteDV') ;

		// 校验器控制器的 选项视图
		$aOptionView = $aSubController->GetOptionView() ;
		JCAT_View::RegisterGlobalName($aOptionView,'DataVerifierOptionUI') ;
		
		
		
		// 主对话框 视图
		$aSubView = new DataVerifierDlg($this) ;
		$this->AddView($aSubView) ;
		$aSubView->SetDocument($aDoc) ;
		
		// 注册事件处理函数
		$this->RegisterEventProcessFunction('BtnOK-clicked',array($this,'OnOk')) ;
	}


	/**
	 * 
	 *
	 * @access	public
	 * @return	IToolboxDataVerifierDoc, null
	 */
	public function MainRun()
	{
		// 对话框 视图
		$aView = $this->GetView('DataVerifierDlg') ;
		JCAT_ASSERT::ASSERT_INSTANCE($aView,'DataVerifierDlg') ;
		
		// 初始化 窗口
		$aDoc = $this->GetDocument('DataVerifierDoc') ;
		JCAT_ASSERT::ASSERT_INSTANCE($aDoc,'IToolboxDataVerifierDoc') ;
		
		$aView->Create() ;
		$this->ExchangeData(JCAT_IViewForm::DOC_TO_UICTRL) ;
		
		// 执行对话框
		$nRet = $aView->DoDialog() ;
		
		if ($nRet===Gtk::RESPONSE_OK)
		{
			return $this->GetDocument('DataVerifierDoc') ;			
		}
		else
		{
			return null ;
		}
	}
	
	
	
	/**
	 * what's this
	 * 
	 * @access	public
	 * @return	void
	 */
	public function OnOk()
	{
		$this->OnApplication() ;
		
		$aDoc = $this->GetDocument('DataVerifierDoc') ;
		
		$aView = $this->GetView('DataVerifierDlg') ;
		$aView->OnOk() ;
	}

}

?>